#include<bits/stdc++.h>
using namespace std;
int a[100005],p[100005];
int d[100005],v[100005];
bool qwe[100005];
bool ttt[100005];
void _main(){
    memset(qwe,0,sizeof(qwe));
    bool A=1;
    int n,m,L,V;
    cin>>n>>m>>L>>V;
    for(int i=1;i<=n;i++){
        cin>>d[i]>>v[i]>>a[i];
        if(a[i])
            A=0;
    }
    int maxn=0;
    for(int i=1;i<=m;i++)
        cin>>p[i],maxn=max(maxn,p[i]);
    if(A){
        int cnt=0;
        for(int i=1;i<=n;i++)
            if(v[i]>V&&d[i]<=maxn)
                cnt++;
        cout<<cnt<<" "<<m-!!(cnt);
        return;
    }
    return;
    for(int i=1;i<=m;i++){
        for(int j=1;j<=n;j++){
            long long tmp=1LL*p[i]*2*a[j]+1LL*v[j]*v[j];
            if(tmp>1LL*V*V){
                qwe[j]=1;
            }
        }
    }
    int ans=0;
    for(int S=0;S<1<<m;S++){
        bitset<30> b=S*2;
        memset(ttt,0,sizeof(ttt));
        for(int i=1;i<=m;i++)
            if(!b[i]){
                for(int j=1;j<=n;j++){
                    long long tmp=1LL*p[i]*2*a[j]+1LL*v[j]*v[j];
                    if(tmp>1LL*V*V){
                        ttt[j]=1;
                    }
                }
            }
        bool ok=1;
        for(int i=1;i<=n;i++)
            if(ttt[i]!=qwe[i])
                ok=0;
        if(ok)
            ans=max(ans,__builtin_popcount(S));
    }
    cout<<ans;
}
int main(){
    freopen("detect.in","r",stdin);
    freopen("detect.out","w",stdout);
    ios::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);
    int t;
    cin>>t;
    while(t--){
        _main();
        cout<<"\n";
    }
}